package com.nl.lib_project.view

import android.content.Context
import android.graphics.Canvas
import android.graphics.Paint
import android.util.AttributeSet
import android.view.View
import androidx.core.content.ContextCompat
import com.nl.lib_project.R

class CustomProgressBar(context: Context, attributeSet: AttributeSet? = null) :
    View(context, attributeSet) {
  // 角度
  private var progress = 0f
  // 圆弧画笔
  private var pan = Paint()
  init {
    // 画笔抗锯齿
    pan.isAntiAlias = true
    // 圆弧两端是圆弧状
    pan.strokeCap = Paint.Cap.ROUND
    // 画笔样式为线
    pan.style = Paint.Style.STROKE
  }

  override fun onDraw(canvas: Canvas) {
    super.onDraw(canvas)
    // 圆弧的宽度 可以根据你自己的需要调整 以下所有根据width/*皆为按比例适配不同大小的尺寸可以按需调整
    pan.strokeWidth = width / 6f
    val offset = width / 12f
    // 绘制底色
    pan.color = ContextCompat.getColor(context, R.color.color_blue_light)
    canvas.drawArc(offset, offset, width - offset, width - offset, 0f, 360f, false, pan)
    // 旋转-90度让圆弧起点从右侧变为正上方
    canvas.rotate(-90f, width / 2f, width / 2f)

    pan.color = ContextCompat.getColor(context, R.color.color_white)
    // 绘制圆弧 此处像内侧偏移20px防止边框的圆弧无法完全展示 起始角度偏移6度防止圆弧部分颜色变为结束颜色
    canvas.drawArc(offset, offset, width - offset, width - offset, 6f, progress, false, pan)
    // 回转90度 让文字正过来(因为刚刚旋转了-90度)
    canvas.rotate(90f, width / 2f, width / 2f)
  }

  /** 根据百分比处理圆弧 */
  fun handlerPercent(current: Int, all: Int) {
    val percent = current.toFloat() / all.toFloat()
    progress = percent * 360f
    invalidate()
  }
}
